package com.shop.cereshop.app.service.recommend;


import com.shop.cereshop.app.page.recommend.*;
import com.shop.cereshop.app.param.recommend.*;
import com.shop.cereshop.commons.domain.buyer.CereBuyerUser;
import com.shop.cereshop.commons.domain.common.Page;
import com.shop.cereshop.commons.exception.CoBusinessException;

import javax.validation.constraints.NotNull;

public interface CereRecommendTrendsService {

    Page<CereRecommendTrendPageVO> trendPage(RecommendTrendPageParam param);

    CereRecommendTrendDetailVO getTrend(RecommendLikesParam param) throws Exception;

    void share(Long recommendId);

    BusinessShopInfo getShopInfo(Long shopId, Long userId);

    Page<RecommendPageVO> getRecommendPage(RecommendPageDTO param, CereBuyerUser user) throws CoBusinessException;

    RecommendPageVO getRecommendDetail(@NotNull Long recommendId, CereBuyerUser user);

    int saveRecommend(@NotNull(message = "参数不为空") RecommendSaveDTO param, CereBuyerUser user,Integer published) throws CoBusinessException;

    void updatePinned(@NotNull(message = "参数不为空") Long recommendId,
                      @NotNull(message = "参数不为空") Boolean pinned,
                      Long buyerUserId) throws CoBusinessException;

    Integer deleteRecommend(@NotNull(message = "参数不为空") Long recommendId, Long buyerUserId);

    Page<RecommendPageVO> getCollectAndLikePage(@NotNull(message = "参数不为空") RecommendLikeDTO param, CereBuyerUser user);

    Page<RecommendPageVO> getMyConcernRecommends(RecommendPageDTO param, CereBuyerUser user);

    AllSearchVO getAllSearch(@NotNull RecommendPageDTO param, CereBuyerUser user);

    void addFootPrint(Long recommendId, CereBuyerUser user);
}
